import axios from 'axios'
// import qs from 'qs'
// import router from '../router'

let axiosIns = axios.create({});


if (process.env.NODE_ENV == 'development') {
  axiosIns.defaults.baseURL = '';
} else if (process.env.NODE_ENV == 'debug') {
  axiosIns.defaults.baseURL = '***';
} else if (process.env.NODE_ENV == 'production') {
  axiosIns.defaults.baseURL = 'http://localhost:5003';
}

axiosIns.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
axiosIns.defaults.headers.get['X-Requested-With'] = 'XMLHttpRequest';
axiosIns.defaults.responseType = 'json';
axiosIns.defaults.timeout = 95000;

// axiosIns.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
// axiosIns.defaults.headers.post['Content-Type'] = 'application/json';
//数据序列化
// axiosIns.defaults.transformRequest = [function (data) {  
//   return qs.stringify(data);
// }];

axiosIns.defaults.validateStatus = function () {
  return true;
};

/**
 * 请求拦截
 */
axiosIns.interceptors.request.use(
  config => {
    //配置config
    config.headers.Accept = '*/*';

    if (config.ContentType === "form") {

      config.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

      // config.data = qs.stringify(config.data);

    }
    if (window.sessionStorage.getItem('token')) {

      let token = window.sessionStorage.getItem('token');

      let accessToken = JSON.parse(token).accessToken;

      config.headers.accessToken = accessToken;

    }
    config.headers.projectId = "ROBOT_v1";

    return config;

  },
  error => {
    return Promise.error(error);
  });
/**
 * 响应拦截
 */
axiosIns.interceptors.response.use(
  response => {
    let data = response.data;
    let status = response.status;
    if (status === 200 || status === 201 || status === 202) {
      return Promise.resolve(data);
    } else {
      return Promise.reject(response);
    }
  },
  // 服务器状态码不是2开头的的情况
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  error => {
    var msg;
    if (error.response.status) {
      switch (error.response.status) {
        case 400:
          msg = '错误请求！'
          break;
          // 401: 未登录
          // 未登录则跳转登录页面，并携带当前页面的路径
          // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:
          msg = '未登录,请登录1'
          // router.replace({
          //   path: '/login',
          //   query: {
          //     redirect: router.currentRoute.fullPath
          //   }
          // });
          break;
          // 403 token过期
          // 登录过期对用户进行提示
          // 清除本地token和清空vuex中token对象
          // 跳转登录页面
        case 403:
          msg = '登录过期，请重新登录！'
          // 清除token
          // localStorage.removeItem('token');
          //store.commit('loginSuccess', null);
          // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
          // setTimeout(() => {
          //   router.replace({
          //     path: '/login',
          //     query: {
          //       redirect: router.currentRoute.fullPath
          //     }
          //   });
          // }, 1000);
          break;
          // 404请求不存在
        case 404:
          msg = '网络请求不存在！'
          break;
          // 其他错误，直接抛出错误提示
        default:
          // Message.warning({
          //   message: error.response.data.message,
          //   duration: 1500,
          // });
          console.log(msg)
      }
      // Message.error({
      //   message: msg
      // });

      return Promise.reject(error.response);


    } else {
      // Message.error({
      //   message: '连接服务器失败！'
      // });
    }
  }
);

let ajaxMethod = ['get', 'post', 'delete', "put"];
let http = {};

ajaxMethod.forEach((method) => {

  //数组取值的两种方式
  http[method] = function (uri, data, config) {

    return new Promise(function (resolve, reject) {

      axiosIns[method](uri, data, config).then((response) => {

        // console.log(response)
        /*根据后台数据进行处理
         *1 code===200   正常数据+错误数据     code!==200   网络异常等
         *2 code===200   正常数据     code!==200   错误数据+网络异常等
         * 这里使用的是第一种方式
         */
        // console.log(response)
        if (response.status === 201 || response.status === 202) resolve(response);

        if (response.code === 11030110 || response.code === 11030113 || response.code === 11030111 || response.code === 11030112) {

          // Message.warning({
          //   content: 'token失效,需要重新登录!',
          //   duration: 3
          // })

          router.push({
            name: 'login'
          });

        } else {

          resolve(response);

        }

      }).catch((response) => {
        reject(response)
      })
    })
  }
});

export default http
